# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/3/31 10:49'

"""
现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,
评论数量(["views","likes","dislikes","comment_total"])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作
"""

import numpy as np

# dtype 文件中数据的数据类型
# delimiter  ，逗号分隔
#  unpack False 按列读取，True 按行读取
t1 = np.loadtxt('./youtube_video_data/GB_video_data_numbers.csv', dtype=np.int, delimiter=',', unpack=True)

print(t1)

print('=======================================================')
# 转置交换轴数据，即：行转列，列转行
t2 = t1.transpose()  # 等同于 t2 = t1.T  或等同于 t2 = t1.swapaxes(1,0)
print(t2)
print('=======================================================')

# 逗号左边是行，右边是列

# 取行
# print(t2[2])

# 取连续的多行
# print(t2[2:])

# 取不连续的多行
# print(t2[[2,8,10]])

# print(t2[1,:])
# print(t2[2:,:])
# print(t2[[2,10,3],:])

# 取列
# print(t2[:,0])

# 取连续的多列
# print(t2[:,2:])

# 取不连续的多列
# print(t2[:,[0,2]])

# 去行和列，取第3行，第四列的值
# a = t2[2,3]
# print(a)
# print(type(a))

# 取多行和多列，取第3行到第五行，第2列到第4列的结果
# 去的是行和列交叉点的位置
b = t2[2:5, 1:4]
# print(b)

# 取多个不相邻的点
# 选出来的结果是（0，0） （2，1） （2，3）
c = t2[[0, 2, 2], [0, 1, 3]]
print(c)
print(
	'=====================================================================================================================================================================')
# 所有小于 1000的情况，打印 bool类型
print(t2 < 1000)
print('=======================================================')
# 所有小于1000的数
print(t2[t2 < 1000])
print('=======================================================')
# 所有 10的倍数的数
print(t2[t2 % 10 == 0])
print('=======================================================')
# 三元运算符的方式，大于10，则是100，否则是 0
print(np.where(t2 > 10, 100, 0))
print('=======================================================')
# clip 裁剪
# 小于10的替换为10，大于18的替换为了18，但是nan不会被替换
print(t2.clip(10, 18))  # 等同于 print(np.clip(t2, 10, 18))
print('=======================================================')

"""
现在希望把之前案例中两个国家的数据方法一起来研究分析，同时保留国家的信息（每条数据的国家来源），应该怎么办
"""
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

#读取2个国家的数据
us_arr = np.loadtxt(us_file_path, dtype=np.int, delimiter=',', unpack=False)
uk_arr = np.loadtxt(uk_file_path, dtype=np.int, delimiter=',', unpack=False)
print(us_arr.shape, uk_arr.shape)
print('===================================')
# 给2个国家的数据 各添加1列，用来做标识
us_type = np.zeros((us_arr.shape[0], 1)).astype(int)
uk_type = np.ones((uk_arr.shape[0], 1)).astype(int)
# 水平合并 新增加的列
us_arr = np.hstack((us_arr, us_type))
print(us_arr.shape)
print('===================================')
uk_arr = np.hstack((uk_arr, uk_type))
print(uk_arr.shape)
print('===================================')
# 最后把2个国家的数据 垂直拼接到一块
final_arr = np.vstack((us_arr, uk_arr))
print(final_arr)

print('======================================================================================')

import numpy as np
from matplotlib import  pyplot as plt

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

# t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t_us = np.loadtxt(us_file_path,delimiter=",",dtype="int")

print(t_us)
#取评论的数据  -1表示 最后1列
t_us_comments = t_us[:,-1]
print(t_us_comments)

#选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments<=5000]

print(t_us_comments.max(),t_us_comments.min())

d = 50

# 双斜杠（//）表示地板除，即先做除法（/），
# 然后向下取整（floor）。至少有一方是float型时，结果为float型；两个数都是int型时，结果为int型。
bin_nums = (t_us_comments.max()-t_us_comments.min())//d

#绘图
plt.figure(figsize=(20,8),dpi=80)

#绘制直方图
plt.hist(t_us_comments,bin_nums)


plt.show()